/**
 * This package contains the search tool.<br/>
 * <br/>
 * It's quite complex internally but if you're just using it here is what you need to know :<br/>
 * <ul>
 * <li>A search is represented by an instance of Search.</li>
 * <li>It's an Iterable<RDFNode> and that's how you access results.</li>
 * <li>You get instances using SearchFactory.</li>
 * <li>Be aware that some search will be invalid and if you don't check that with Search.isValid() you may get some trouble later.</li>
 * </ul>
 * <br/>
 * <br/>
 * If you need to look at it in detail this might help you find you way around:<br/>
 * <ul>
 * <li>at level 1 in hierarchy, AbstractSearch contains what's useful for every Search implementation.</li>
 * <li>at level 2 in hierarchy, a distinction is made between :
 *   <ul>
 *     <li>SPARQL Ask searches</li>
 *     <li>SPARQL Select searches</li>
 *     <li>"MergedSearch" which wraps several searches together.</li>
 *   </ul>
 * </li>
 * <li>at level 3 in hierarchy, classes are named XYSearch where :
 *   <ul>
 *     <li>X is the type of node we are looking for. (Anon, Litteral, UriNode or AnyNode)</li>
 *     <li>Y is the way we are looking for that node. (Exact, Lucene, Regex)</li>
 *   </ul>
 * 
 * </li>
 * </ul>
 */
package gov.nist.ssd.swqb.core.search;